package com.qf.controller;

import com.qf.form.SmsInterfaceForm;
import com.qf.service.SmsInterfaceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
 *@Description:
 *@author:刘哥
 *@Date:86180 2022/10/18 14:09
 */
@RestController
@Slf4j
@RequestMapping("/sms")
public class SmsController {
//    获取配置文件中的数据
    @Value("${ip-header}")
    private List<String> ipHeaderList;

    private SmsInterfaceService interfaceService;

    @PostMapping("/smsInterface")
    public Map<String,String> smsInterface(SmsInterfaceForm form,HttpServletRequest request) {
//        获取用户的ip
        String ip = getRealIP(request);
//        将服务器的ip地址放入form对象中
        form.setIp(ip);
//        校验form对象
        Map<String, String> resultMap = checkFormNull(form);
        if (resultMap != null) {
            return resultMap;
        }
//        调用service校验form数据是否存在
        resultMap = interfaceService.checkInterfaceForm(form);
//
        return resultMap;
    }

    /***
     * 校验各个属性是否为空
     * @param form
     * @return
     */
    private Map<String,String> checkFormNull(SmsInterfaceForm form){
//        封装返回map对象
        Map<String,String> resultMap=new HashMap<>();

//        校验各个属性
        if(StringUtils.isEmpty(form.getClientID())){
            resultMap.put("code","101");
            resultMap.put("message","认证错: clientId错误");
            return resultMap;
        }
        if(StringUtils.isEmpty(form.getSrcID())){
            resultMap.put("code","106");
            resultMap.put("message","认证错: 下行编号(srcID)错误");
            return resultMap;
        }
        if(StringUtils.isEmpty(form.getMobile())){
            resultMap.put("code","105");
            resultMap.put("message","认证错: 手机号错误");
            return resultMap;
        }
        if(StringUtils.isEmpty(form.getContent())){
            resultMap.put("code","104");
            resultMap.put("message","次奥西长度错:为空或超长(目前定位500字)");
            return resultMap;
        }
        if(StringUtils.isEmpty(form.getPwd())){
            resultMap.put("code","102");
            resultMap.put("message","密码错误");
            return resultMap;
        }
        if(StringUtils.isEmpty(form.getIp())){
            resultMap.put("code","103");
            resultMap.put("message","IP校验错误");
            return resultMap;
        }
        return null;
    }


    /**
     * 获取用户真实的ip
     * 1.可以直接从这个服务器接口获取
     * 2.也可以从这个服务器连接的nginx,然后ngin想再分配ip给这个模块,也可以获取
     * @param request
     * @return
     */
    private String getRealIP(HttpServletRequest request){
        for (String ipHeader : ipHeaderList) {
//            校验获取到的ip的属性头不为空
            if(!StringUtils.isEmpty(ipHeader) && ipHeader.length()>0){
//                获取真实的ip,这里后去的是被nginx代理的
                String ip = request.getHeader(ipHeader);
//                判断ip地址是否为空,是否能够获取到
                if(!StringUtils.isEmpty(ip) && "unknown".equalsIgnoreCase(ip)){
//                    返回被nginx代理的ip
                    return ip;
                }
            }
        }
//        获取不被nginx代理的ip
        return request.getRemoteAddr();
    }
}
